{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Data info:\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 16 columns):\n",
      "instant       731 non-null int64\n",
      "dteday        731 non-null object\n",
      "season        731 non-null int64\n",
      "yr            731 non-null int64\n",
      "mnth          731 non-null int64\n",
      "holiday       731 non-null int64\n",
      "weekday       731 non-null int64\n",
      "workingday    731 non-null int64\n",
      "weathersit    731 non-null int64\n",
      "temp          731 non-null float64\n",
      "atemp         731 non-null float64\n",
      "hum           731 non-null float64\n",
      "windspeed     731 non-null float64\n",
      "casual        731 non-null int64\n",
      "registered    731 non-null int64\n",
      "cnt           731 non-null int64\n",
      "dtypes: float64(4), int64(11), object(1)\n",
      "memory usage: 91.5+ KB\n",
      "Data description:\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd #数据处理\n",
    "import os\n",
    "import matplotlib.pyplot as pl\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.metrics import r2_score  #评价回归预测模型的性能\n",
    "\n",
    "# print(os.getcwd())\n",
    "\n",
    "t = os.system('cls')\n",
    "\n",
    "# ExPath = 'F:/AI/Excise/Week1'\n",
    "ExPath = ''\n",
    "\n",
    "data = pd.read_csv(ExPath + 'day.csv')\n",
    "print('Data info:')\n",
    "data.info()\n",
    "\n",
    "# 删除无用项\n",
    "del data['casual']\n",
    "del data['registered']\n",
    "del data['instant']\n",
    "\n",
    "\n",
    "print('Data description:')\n",
    "data.describe()\n",
    "\n",
    "# 删除非数值项\n",
    "del data['dteday']\n",
    "# 删除类别型特征\n",
    "# del data['mnth']\n",
    "# del data['season']\n",
    "# del data['hum']\n",
    "# del data['windspeed']\n",
    "# del data['holiday']\n",
    "# del data['weekday']\n",
    "# del data['workingday']\n",
    "# del data['weathersit']\n",
    "# del data['atemp']\n",
    "\n",
    "# '''\n",
    "# Huber损失\n",
    "# '''\n",
    "\n",
    "# delta = 1.5\n",
    "# huber = lambda x: (x ** 2/2) * (abs(x) <= delta) + (delta * abs(x) -  delta **2/2) * (abs(x) > delta)\n",
    "\n",
    "# l2 = lambda x: (abs(x) **2)/2\n",
    "# l1 = abs\n",
    "\n",
    "# funs = [l2,l1,huber]\n",
    "# styles = ['r-', 'b:','g-.']\n",
    "# labels = ['L2', 'L1', 'Huber-' + str(delta)]\n",
    "# x = np.arange(-4,4, .01)\n",
    "\n",
    "# for i, fun in enumerate(funs):\n",
    "#     pl.plot(x, fun(x), styles[i], label = labels[i])\n",
    "\n",
    "# pl.axis([-4,4,-0.5,5])\n",
    "# pl.legend()\n",
    "# pl.savefig('huberLossDemo.png')\n",
    "# pl.show() \n",
    "\n",
    "\n",
    "# 无正则：最小二乘线性回归 OLS\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2011 mean is 3405.7616438356163\n",
      "2012 mean is 5599.934426229508\n",
      "mean_add_ration is 2194.172782393892\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "\n",
    "data_train = data[data['yr'] == 0]\n",
    "del data_train['yr']\n",
    "# print('Train Data info(2011):')\n",
    "# data_train.info()\n",
    "\n",
    "# data = data[ np.logical_and(data['yr'] == 0, data['mnth'] >1 )]\n",
    "data_test = data[data['yr'] == 1]\n",
    "del data_test['yr']\n",
    "\n",
    "\n",
    "\n",
    "# print('Train Data info(2012):')\n",
    "# data_test.info()\n",
    "\n",
    "# head5 = data_train.head()\n",
    "\n",
    "# print(head5)\n",
    "# 计算增长率\n",
    "mean_2011 = np.mean( data_train['cnt'])\n",
    "mean_2012 = np.mean( data_test['cnt'])\n",
    "print('2011 mean is', mean_2011)\n",
    "print('2012 mean is', mean_2012)\n",
    "\n",
    "mean_add_ration = mean_2012 - mean_2011\n",
    "print('mean_add_ration is', mean_add_ration)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# keys = ['holiday','weekday','workingday','weathersit','temp','atemp','hum','windspeed','cnt']\n",
    "# for key in keys:\n",
    "#     i_train = data_train[key]\n",
    "#     fig = pl.figure()\n",
    "#     sns.distplot(i_train, bins = 30, kde = False)\n",
    "#     pl.xlabel(key, fontsize = 12)\n",
    "#     pl.show()\n",
    "    \n",
    "# mnth_train = data_train['mnth']\n",
    "# holiday_train = data_train['holiday']\n",
    "# weekday_train = data_train['weekday']\n",
    "# workingday_train = data_train['workingday']\n",
    "# weathersit_train = data_train['weathersit']\n",
    "# temp_train = data_train['temp']\n",
    "# atemp_train = data_train['atemp']\n",
    "# hum_train = data_train['hum']\n",
    "# windspeed_train = data_train['windspeed']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['season', 'mnth', 'holiday', 'weekday', 'workingday', 'weathersit',\n",
      "       'temp', 'atemp', 'hum', 'windspeed', 'cnt'],\n",
      "      dtype='object')\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(11, 11)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cols = data_train.columns\n",
    "print(cols)\n",
    "\n",
    "data_corr = data_train.corr().abs()\n",
    "\n",
    "data_corr.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pl.subplots(figsize = (13,9))\n",
    "sns.heatmap(data_corr,annot = True)\n",
    "\n",
    "sns.heatmap(data_corr,mask = data_corr<1, cbar = False)\n",
    "\n",
    "# pl.savefig('bike_coor.png')\n",
    "pl.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "temp and atemp = 1.00\n",
      "season and mnth = 0.83\n",
      "atemp and cnt = 0.78\n",
      "temp and cnt = 0.77\n",
      "weathersit and hum = 0.58\n",
      "season and cnt = 0.54\n"
     ]
    }
   ],
   "source": [
    "threshold = 0.5\n",
    "corr_list = []\n",
    "size = data_corr.shape[1]\n",
    "\n",
    "#search for the highly correlated pairs\n",
    "# for i in range(0,size):\n",
    "#     for j in range(i+1, size):\n",
    "#         if (data_corr.iloc[i,j] >= threshold and data_corr.iloc[i,j] < 1) or (data_corr.iloc[i,j] < 0 and data_corr.iloc[i,j] <= -threshold):\n",
    "#             corr_list.append([data_corr.iloc[i,j], i, j])\n",
    "            \n",
    "for i in range(0, size): #for 'size' features\n",
    "    for j in range(i+1,size): #avoid repetition\n",
    "        if (data_corr.iloc[i,j] >= threshold and data_corr.iloc[i,j] < 1) or (data_corr.iloc[i,j] < 0 and data_corr.iloc[i,j] <= -threshold):\n",
    "            corr_list.append([data_corr.iloc[i,j],i,j]) #store correlation and columns index\n",
    "\n",
    "        \n",
    "# s_corr_list = sorted(corr_list, key = lambda x: -abs(x[0]))\n",
    "\n",
    "#Sort to show higher ones first            \n",
    "s_corr_list = sorted(corr_list,key=lambda x: -abs(x[0]))\n",
    "\n",
    "#Print correlations and column names\n",
    "for v,i,j in s_corr_list:\n",
    "    print (\"%s and %s = %.2f\" % (cols[i],cols[j],v))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is 0.63660756905241\n",
      "The r2 score of LinearRegression on train is 0.758519666910396\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Users\\SEELE\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n"
     ]
    }
   ],
   "source": [
    "X_train = data_train.drop('cnt', axis = 1)\n",
    "X_test = data_test.drop('cnt',axis = 1)\n",
    "\n",
    "\n",
    "\n",
    "columns = X_train.columns\n",
    "\n",
    "y_train = data_train['cnt']  + mean_add_ration\n",
    "# print(y_train)\n",
    "y_test = data_test['cnt']  \n",
    "\n",
    "y_train = y_train.values.reshape(-1,1)\n",
    "y_test = y_test.values.reshape(-1,1)\n",
    "\n",
    "\n",
    "#数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "#构造输入特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "ss_y = StandardScaler()\n",
    "\n",
    "#分别对训练和训练测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.transform(X_test)\n",
    "\n",
    "y_train = ss_y.fit_transform(y_train)\n",
    "y_test = ss_y.transform(y_test)\n",
    "\n",
    "\n",
    "#训练模型\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "#使用默认配置初始化\n",
    "lr = LinearRegression()\n",
    "\n",
    "#训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)\n",
    "\n",
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "print('The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))\n",
    "#训练集\n",
    "print('The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4O677+bggw9eX/ett97apzo2x5CWJAHwt7/9jUmTJvHwww/zmte8hre85S1ALaRvvvnm9QG7du1ali5dyhFHHMEnPvEJPvWpT3HsscdyxBFHbLC/22+/nenTp9P5yZ4TTjiB3//+95utITP5zGc+w4IFC9hmm21YsWIFq1atYvfdd1+/zWGHHcapp57KCy+8wPHHH8+kSX2blfqYY45h2223Zdttt2Xs2LGsWrWKefPmsWjRIg477LD178nYsWMBuOaaa5g7dy7r1q1j5cqV3H///etD+oQTTuhTDb3xdLckCfj7NelHHnmE559/njlz5gC14DznnHNYvHgxixcvZtmyZZx22mnsu+++LFq0iIMOOohzzjmH888/f5N99vQRpJEjR/Liiy+u3//zzz8PwJVXXsnq1atZtGgRixcvZrfddtvkc8ZHHnkkCxYsYM899+Skk07i8ssv71N7t9122/X3R4wYwbp168hMZs2atb6tv/vd72hvb+ehhx7iwgsvZN68edx9990cc8wxG9S13Xbb9amG3tiTljRo6h2x3OiRzdoyY8aM4aKLLmLmzJmcddZZHHXUUXz2s5/lxBNPZPTo0axYsYKWlhbWrVvHzjvvzPvf/35Gjx7NpZdeusF+Xvva1/LhD3+YNWvWsMMOO3DttddyyCGHALXruIsWLeI973kPN9xwAy+88AJQO2U+duxYWlpauOWWW3jkkU2/0fGRRx5hzz335IwzzuCZZ57hzjvv5OSTT25I22fMmMHMmTP56Ec/ytixY/nzn//M008/zVNPPcV2223HmDFjWLVqFTfddBPTp09vyGtujiEtSQUa6j9UJk+ezCGHHMJVV13FSSedxJIlS5g2bRpQG+R1xRVXsGzZMj75yU+yzTbb0NLSwre//e0N9jFu3Dja29uZNm0a48aN49BDD10/COuMM85g5syZTJkyhRkzZqzviZ544om84x3voK2tjUmTJvHqV796k9rmz5/PBRdcQEtLC6NHj+6xJ33MMcesnzN72rRpfOhDH+q13fvvvz9f/OIXeetb38qLL75IS0sLc+bMYerUqUyePJkDDjiAvffem8MPP7z+N7Mfovb9GYOjra0tO0f8SWo+9qR7tmTJEvbbb7+hLkMDoLtjGxGLMrPXz4N5TVqSpEIZ0pIkFcqQlqRCDOblRw2O/h5TQ1qSCjBq1CjWrFljUA8jnd8nPWrUqD7vw9HdklSA8ePHs3z5clavXj3UpaiBRo0axfjx4/v8fENakgrQ0tLCXnvtNdRlqDCe7pYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFcqQliSpUIa0JEmFMqQlSSqUIS1JUqEMaUmSCmVIS5JUKENakqRC9RrSETEqIu6IiLsi4r6I+Hy1fK+IuD0ilkbE1RHxkoEvV5Kk5lFPT/o54E2ZeQgwCTg6IqYCXwW+kZn7AH8BThu4MiVJaj69hnTWrK0etlS3BN4EXFctvww4fkAqlCSpSY2sZ6OIGAEsAl4JzAH+ADyRmeuqTZYDe/bw3NnAbIAJEyb0t15JWq+9vbHbSaWpa+BYZnZk5iRgPDAF2K+7zXp47tzMbMvMttbW1r5XKklSk9mi0d2Z+QQwH5gK7BgRnT3x8cCjjS1NkqTmVs/o7taI2LG6/1LgzcAS4BbgXdVms4AbBqpISZKaUT3XpMcBl1XXpbcBrsnMn0XE/cBVEfFF4L+A7w9gnZIkNZ1eQzoz7wYmd7P8QWrXpyVJ0gBwxjFJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFaqeb8GSpEHV3j7UFUhlsCctSVKhDGlJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFcqQliSpUIa0JEmFMqQlSSqUIS1JUqFGDnUBkgZXe3tjt5M0cOxJS5JUKENakqRCGdKSJBXKkJYkqVC9hnREvCwibomIJRFxX0R8uFreHhErImJxdXv7wJcrSVLzqGd09zrg45l5Z0RsDyyKiF9W676RmRcOXHmSJDWvXkM6M1cCK6v7T0fEEmDPgS5MkqRmt0XXpCNiIjAZuL1adHZE3B0Rl0TETg2uTZKkplb3ZCYRMRr4V+AjmflURHwb+AKQ1c+vAad287zZwGyACRMmNKJmSYPASU+koVdXTzoiWqgF9JWZ+ROAzFyVmR2Z+SLwXWBKd8/NzLmZ2ZaZba2trY2qW5KkYa+e0d0BfB9Ykplf77J8XJfN3gnc2/jyJElqXvWc7j4cOAm4JyIWV8s+A7wvIiZRO939MHDmgFQoSVKTqmd0961AdLPqF40vR5IkdXLGMUmSCmVIS5JUKENakqRC1f05aUnaWm3JZ7n93LdKYk9akqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFcqQliSpUIa0JEmFMqQlSSqUIS1JUqEMaUmSCmVIS5JUKENakqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVKheQzoiXhYRt0TEkoi4LyI+XC3fOSJ+GRFLq587DXy5kiQ1j3p60uuAj2fmfsBU4EMRsT/waWBeZu4DzKseS5KkBuk1pDNzZWbeWd1/GlgC7AnMBC6rNrsMOH6gipQkqRlt0TXpiJgITAZuB3bLzJVQC3JgbA/PmR0RCyNi4erVq/tXrSRJTaTukI6I0cC/Ah/JzKfqfV5mzs3Mtsxsa21t7UuNkiQ1pbpCOiJaqAX0lZn5k2rxqogYV60fBzw2MCVKktSc6hndHcD3gSWZ+fUuq24EZlX3ZwE3NL48SZKa18g6tjkcOAm4JyIWV8s+A3wFuCYiTgP+H/DugSlRkqTm1GtIZ+atQPSwekZjy5EkSZ2ccUySpEIZ0pIkFcqQliSpUPUMHJOkHrW3D3UFjVVve4Zbu1Ume9KSJBXKkJYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFWrkUBcgqWft7UNdgaShZE9akqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKlSvIR0Rl0TEYxFxb5dl7RGxIiIWV7e3D2yZkiQ1n3p60pcCR3ez/BuZOam6/aKxZUmSpF5DOjMXAH8ehFokSVIXI/vx3LMj4mRgIfDxzPxLdxtFxGxgNsCECRP68XKSVI729sZuJ3WnrwPHvg28ApgErAS+1tOGmTk3M9sys621tbWPLydJUvPpU0hn5qrM7MjMF4HvAlMaW5YkSepTSEfEuC4P3wnc29O2kiSpb3q9Jh0RPwamA7tGxHLgPGB6REwCEngYOHMAa5QkqSn1GtKZ+b5uFn9/AGqRJEldOOOYJEmFMqQlSSqUIS1JUqEMaUmSCmVIS5JUKENakqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklSokUNdgDRU2tsbu500WPy32zzsSUuSVChDWpKkQhnSkiQVypCWJKlQhrQkSYUypCVJKpQhLUlSoQxpSZIK5WQm0hBwkglJ9bAnLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFarXkI6ISyLisYi4t8uynSPilxGxtPq508CWKUlS86mnJ30pcPRGyz4NzMvMfYB51WNJktRAvYZ0Zi4A/rzR4pnAZdX9y4DjG1yXJElNr6+TmeyWmSsBMnNlRIztacOImA3MBpgwYUIfX06Stk71TlzjBDfqzoAPHMvMuZnZlpltra2tA/1ykiQNG30N6VURMQ6g+vlY40qSJEnQ95C+EZhV3Z8F3NCYciRJUqd6PoL1Y+A3wKsiYnlEnAZ8BXhLRCwF3lI9liRJDdTrwLHMfF8Pq2Y0uBZJktSFM45JklQoQ1qSpEIZ0pIkFaqvk5lIkoYJJ1wplz1pSZIKZUhLklQoQ1qSpEIZ0pIkFcqQliSpUIa0JEmFMqQlSSqUIS1JUqGczERqICd7kNRI9qQlSSqUIS1JUqEMaUmSCmVIS5JUKENakqRCGdKSJBXKkJYkqVCGtCRJhXIyE6kXTlAiaajYk5YkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgplSEuSVChDWpKkQvk5aUkapvyM/9bPnrQkSYUypCVJKpQhLUlSoQxpSZIKZUhLklSofo3ujoiHgaeBDmBdZrY1oihJktSYj2C9MTMfb8B+JElSF57uliSpUP3tSSdwc0Qk8J3MnLvxBhExG5gNMGHChH6+nCQNT048ou70tyd9eGYeCrwN+FBEHLnxBpk5NzPbMrOttbW1ny8nSVLz6FdIZ+aj1c/HgOuBKY0oSpIk9SOkI2K7iNi+8z7wVuDeRhUmSVKz68816d2A6yOicz8/ysz/3ZCqJElS30M6Mx8EDmlgLZIkqQs/giVJUqEMaUmSCmVIS5JUqEZMCyr12UBM4OCkENLQq/f30N/XzbMnLUlSoQxpSZIKZUhLklQoQ1qSpEIZ0pIkFcqQliSpUIa0JEmFMqQlSSqUk5lo2HFyBGlg+Ls1+OxJS5JUKENakqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkqlCEtSVKhDGlJkgrlZCYFqXeigEZvt6XbSpIGhz1pSZIKZUhLklQoQ1qSpEIZ0pIkFcqQliSpUIa0JEmFMqQlSSqUIS1JUqG26slMhnICDl9bkgZPs/6/Z09akqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkqVL9COiKOjojfRcSyiPh0o4qSJEn9COmIGAHMAd4G7A+8LyL2b1RhkiQ1u/70pKcAyzLzwcx8HrgKmNmYsiRJUmRm354Y8S7g6Mw8vXp8EvDazDx7o+1mA7Orh68CftfN7nYFHu9TIVs/296cbHvzaub22/a/e3lmtvb2pP7MOBbdLNsk8TNzLjB3szuKWJiZbf2oZatl2217s2nmtkNzt9+2b3nb+3O6eznwsi6PxwOP9mN/kiSpi/6E9H8C+0TEXhHxEuC9wI2NKUuSJPX5dHdmrouIs4F/B0YAl2TmfX3c3WZPhw9ztr052fbm1cztt+1bqM8DxyRJ0sByxjFJkgplSEuSVKghCemIuCAiHoiIuyPi+ojYsYftht20oxHx7oi4LyJejIgeh+NHxMMRcU9ELI6IhYNZ40DZgrYPx+O+c0T8MiKWVj936mG7juqYL46IrXogZm/HMSK2jYirq/W3R8TEwa9yYNTR9lMiYnWXY336UNQ5ECLikoh4LCLu7WF9RMRF1Xtzd0QcOtg1DpQ62j49Ip7sctw/1+tOM3PQb8BbgZHV/a8CX+1mmxHAH4C9gZcAdwH7D0W9DW77ftQmdZkPtG1mu4eBXYe63sFu+zA+7v8D+HR1/9Pd/Zuv1q0d6lob1N5ejyPwQeB/VfffC1w91HUPYttPAS4e6loHqP1HAocC9/aw/u3ATdTm2pgK3D7UNQ9i26cDP9uSfQ5JTzozb87MddXD31L7jPXGhuW0o5m5JDO7m3Vt2Kuz7cPyuFNrw2XV/cuA44ewlsFQz3Hs+p5cB8yIiO4mSdraDNd/w3XJzAXAnzezyUzg8qz5LbBjRIwbnOoGVh1t32IlXJM+ldpfVRvbE/hjl8fLq2XNIoGbI2JRNbVqsxiux323zFwJUP0c28N2oyJiYUT8NiK25iCv5ziu36b6o/1JYJdBqW5g1ftv+B+r073XRcTLulk/XA3X3/F6TYuIuyLipog4oLeN+zMt6GZFxP8Bdu9m1bmZeUO1zbnAOuDK7nbRzbKt4vNi9bS9Dodn5qMRMRb4ZUQ8UP2VVrQGtH1YHvct2M2E6rjvDfwqIu7JzD80psJBVc9x3GqPdS/qade/AT/OzOci4gPUzii8acArK8NwPe71uJPanN1rI+LtwE+BfTb3hAEL6cx88+bWR8Qs4FhgRlYn6zey1U472lvb69zHo9XPxyLiemqn0IoP6Qa0fVge94hYFRHjMnNldWrvsR720XncH4yI+cBkatc3tzb1HMfObZZHxEhgDA0+VThEem17Zq7p8vC71MbmNIut9ne8vzLzqS73fxER34qIXTOzxy8dGarR3UcDnwKOy8y/9rBZ0047GhHbRcT2nfepDbTrdrTgMDRcj/uNwKzq/ixgk7MKEbFTRGxb3d8VOBy4f9AqbKx6jmPX9+RdwK96+IN9a9Nr2ze6BnscsGQQ6xtqNwInV6O8pwJPdl4KGu4iYvfOcRcRMYVaBq/Z7JOGaATcMmrXJBZXt84RnnsAv+iy3duB31PrSZw7FLUOQNvfSe0vyeeAVcC/b9x2aqNC76pu9zVT24fxcd8FmAcsrX7uXC1vA75X3X8dcE913O8BThvquvvZ5k2OI3A+tT/OAUYB11b/H9wB7D3UNQ9i279c/W7fBdwCvHqoa25g238MrAReqH7fTwM+AHygWh/AnOq9uYfNfMpla7vV0fazuxz33wKv622fTgsqSVKhShjdLUmSumFIS5JUKENakqRCGdKSJBXKkJYkqVCGtCRJhTKkJUkq1P8H0j0cAMNkbTkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#在训练集上观察预测残差的分布，看是否符合模型假设：噪声为0均值的高斯噪声\n",
    "f, ax = pl.subplots(figsize=(7, 5)) \n",
    "f.tight_layout() \n",
    "ax.hist(y_train - y_train_pred_lr,bins=40, label='Residuals Linear', color='b', alpha=.5); \n",
    "ax.set_title(\"Histogram of Residuals\") \n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#还可以观察预测值与真值的散点图\n",
    "pl.figure(figsize=(4, 3))\n",
    "pl.scatter(y_train, y_train_pred_lr)\n",
    "pl.plot([-3, 3], [-3, 3], '--k')   #数据已经标准化，3倍标准差即可\n",
    "pl.axis('tight')\n",
    "pl.xlabel('True price')\n",
    "pl.ylabel('Predicted price')\n",
    "pl.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Users\\SEELE\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:578: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 0.29608951,  0.00118053, -0.0345988 ,  0.03591889,  0.00792502,\n",
       "       -0.22308327,  0.47388907,  0.16057029, -0.06109507, -0.1205272 ])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性模型，随机梯度下降优化模型参数\n",
    "# 随机梯度下降一般在大数据集上应用，其实本项目不适合用\n",
    "from sklearn.linear_model import SGDRegressor\n",
    "\n",
    "# 使用默认配置初始化线\n",
    "sgdr = SGDRegressor(max_iter=1000)\n",
    "\n",
    "# 训练：参数估计\n",
    "sgdr.fit(X_train, y_train)\n",
    "\n",
    "# 预测\n",
    "#sgdr_y_predict = sgdr.predict(X_test)\n",
    "\n",
    "sgdr.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The value of default measurement of SGDRegressor on test is 0.6385979705711091\n",
      "The value of default measurement of SGDRegressor on train is 0.7583082997880031\n"
     ]
    }
   ],
   "source": [
    "# 使用SGDRegressor模型自带的评估模块(评价准则为r2_score)，并输出评估结果\n",
    "print ('The value of default measurement of SGDRegressor on test is', sgdr.score(X_test, y_test))\n",
    "print ('The value of default measurement of SGDRegressor on train is', sgdr.score(X_train, y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is 0.6346968842940645\n",
      "The r2 score of RidgeCV on train is 0.757697549242605\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#设置超参数（正则参数）范围\n",
    "alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#模型训练\n",
    "ridge.fit(X_train, y_train)    \n",
    "\n",
    "#预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print ('The r2 score of RidgeCV on test is', r2_score(y_test, y_test_pred_ridge))\n",
    "print ('The r2 score of RidgeCV on train is', r2_score(y_train, y_train_pred_ridge))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 10.0\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>temp</td>\n",
       "      <td>[0.6552364353084584]</td>\n",
       "      <td>[0.35015384686244255]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season</td>\n",
       "      <td>[0.29517804267926956]</td>\n",
       "      <td>[0.2757654251364565]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>weekday</td>\n",
       "      <td>[0.035332402181452685]</td>\n",
       "      <td>[0.033998994978232]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>workingday</td>\n",
       "      <td>[0.007286281574697632]</td>\n",
       "      <td>[0.007293423015387934]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>mnth</td>\n",
       "      <td>[0.003868571561647311]</td>\n",
       "      <td>[0.01883600695545301]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>atemp</td>\n",
       "      <td>[-0.021140727599851836]</td>\n",
       "      <td>[0.28047096356274415]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>holiday</td>\n",
       "      <td>[-0.03601989254948183]</td>\n",
       "      <td>[-0.03364170993901827]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>hum</td>\n",
       "      <td>[-0.05942477581033438]</td>\n",
       "      <td>[-0.06294976734685803]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>[-0.12391854742331616]</td>\n",
       "      <td>[-0.1171389024523016]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>weathersit</td>\n",
       "      <td>[-0.22569477586902081]</td>\n",
       "      <td>[-0.21642688270722432]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns                  coef_lr              coef_ridge\n",
       "6        temp     [0.6552364353084584]   [0.35015384686244255]\n",
       "0      season    [0.29517804267926956]    [0.2757654251364565]\n",
       "3     weekday   [0.035332402181452685]     [0.033998994978232]\n",
       "4  workingday   [0.007286281574697632]  [0.007293423015387934]\n",
       "1        mnth   [0.003868571561647311]   [0.01883600695545301]\n",
       "7       atemp  [-0.021140727599851836]   [0.28047096356274415]\n",
       "2     holiday   [-0.03601989254948183]  [-0.03364170993901827]\n",
       "8         hum   [-0.05942477581033438]  [-0.06294976734685803]\n",
       "9   windspeed   [-0.12391854742331616]   [-0.1171389024523016]\n",
       "5  weathersit   [-0.22569477586902081]  [-0.21642688270722432]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "pl.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "pl.xlabel('log(alpha)')\n",
    "pl.ylabel('mse')\n",
    "pl.show()\n",
    "\n",
    "print ('alpha is:', ridge.alpha_)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Users\\SEELE\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:1094: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n",
      "E:\\Users\\SEELE\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n",
      "  ConvergenceWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is 0.5667454309537228\n",
      "The r2 score of LassoCV on train is 0.7244316331134646\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Users\\SEELE\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n",
      "  ConvergenceWarning)\n",
      "E:\\Users\\SEELE\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n",
      "  ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#设置超参数搜索范围\n",
    "alphas = [0.00001, 0.0001, 0.001, 0.01,0.05, 0.1,0.5, 1, 10,100]\n",
    "\n",
    "#生成一个LassoCV实例\n",
    "lasso = LassoCV(alphas=alphas)   \n",
    "\n",
    "#训练（内含CV）\n",
    "lasso.fit(X_train, y_train)  \n",
    "\n",
    "#测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print( 'The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso))\n",
    "print ('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 0.1\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>temp</td>\n",
       "      <td>[0.6552364353084584]</td>\n",
       "      <td>[0.35015384686244255]</td>\n",
       "      <td>0.257757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season</td>\n",
       "      <td>[0.29517804267926956]</td>\n",
       "      <td>[0.2757654251364565]</td>\n",
       "      <td>0.224122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>weekday</td>\n",
       "      <td>[0.035332402181452685]</td>\n",
       "      <td>[0.033998994978232]</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>workingday</td>\n",
       "      <td>[0.007286281574697632]</td>\n",
       "      <td>[0.007293423015387934]</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>mnth</td>\n",
       "      <td>[0.003868571561647311]</td>\n",
       "      <td>[0.01883600695545301]</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>atemp</td>\n",
       "      <td>[-0.021140727599851836]</td>\n",
       "      <td>[0.28047096356274415]</td>\n",
       "      <td>0.311720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>holiday</td>\n",
       "      <td>[-0.03601989254948183]</td>\n",
       "      <td>[-0.03364170993901827]</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>hum</td>\n",
       "      <td>[-0.05942477581033438]</td>\n",
       "      <td>[-0.06294976734685803]</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>[-0.12391854742331616]</td>\n",
       "      <td>[-0.1171389024523016]</td>\n",
       "      <td>-0.033185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>weathersit</td>\n",
       "      <td>[-0.22569477586902081]</td>\n",
       "      <td>[-0.21642688270722432]</td>\n",
       "      <td>-0.168901</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns                  coef_lr              coef_ridge  coef_lasso\n",
       "6        temp     [0.6552364353084584]   [0.35015384686244255]    0.257757\n",
       "0      season    [0.29517804267926956]    [0.2757654251364565]    0.224122\n",
       "3     weekday   [0.035332402181452685]     [0.033998994978232]    0.000000\n",
       "4  workingday   [0.007286281574697632]  [0.007293423015387934]    0.000000\n",
       "1        mnth   [0.003868571561647311]   [0.01883600695545301]    0.000000\n",
       "7       atemp  [-0.021140727599851836]   [0.28047096356274415]    0.311720\n",
       "2     holiday   [-0.03601989254948183]  [-0.03364170993901827]   -0.000000\n",
       "8         hum   [-0.05942477581033438]  [-0.06294976734685803]   -0.000000\n",
       "9   windspeed   [-0.12391854742331616]   [-0.1171389024523016]   -0.033185\n",
       "5  weathersit   [-0.22569477586902081]  [-0.21642688270722432]   -0.168901"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "pl.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "pl.xlabel('log(alpha)')\n",
    "pl.ylabel('mse')\n",
    "pl.show()    \n",
    "            \n",
    "print ('alpha is:', lasso.alpha_)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# #### Lasso／L1正则\n",
    "# # class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "# #                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "# #                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "# #                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "# from sklearn.linear_model import LassoCV\n",
    "\n",
    "# #设置超参数搜索范围\n",
    "# alphas = [0.00001, 0.0001, 0.001, 0.01]\n",
    "\n",
    "# #生成一个LassoCV实例\n",
    "# lasso = LassoCV(alphas=alphas)   \n",
    "\n",
    "# #训练（内含CV）\n",
    "# lasso.fit(X_train, y_train)  \n",
    "\n",
    "# #测试\n",
    "# y_test_pred_lasso = lasso.predict(X_test)\n",
    "# y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "\n",
    "# # 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "# print( 'The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso))\n",
    "# print ('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "# pl.plot(np.log10(lasso.alphas_), mses) \n",
    "# #plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "# pl.xlabel('log(alpha)')\n",
    "# pl.ylabel('mse')\n",
    "# pl.show()    \n",
    "            \n",
    "# print ('alpha is:', lasso.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
